package br.com.caelum.controller;

import br.com.caelum.dao.UsuarioDao;
import br.com.caelum.model.Usuario;
import br.com.caelum.model.UsuarioWeb;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.ValidationMessage;

/**
 *
 * @author Rachid
 */
@Resource
public class UsuarioController {

    private UsuarioDao dao;
    private Result result;
    private Validator validator;
    private UsuarioWeb usuarioWeb;

    public UsuarioController(UsuarioDao dao, Result result, Validator validator, UsuarioWeb usuarioWeb) {
        this.dao = dao;
        this.result = result;
        this.validator = validator;
        this.usuarioWeb = usuarioWeb;
    }

    public void adiciona(Usuario usuario){
        if(dao.verificaUsuario(usuario)){
            validator.add(new ValidationMessage("Login já existe", "usuario.login"));
        }
        validator.onErrorUsePageOf(this).novo();
        
        dao.salvar(usuario);
        result.redirectTo(ProdutoController.class).lista();
    }

    public void loginForm(){
        
    }

    public void login(Usuario usuario){
        Usuario carregado = dao.buscaUsuario(usuario);
        if (carregado == null){           
            validator.add(new ValidationMessage("Login e/ou senha inválidos", "usuario.login"));
        }
        validator.onErrorUsePageOf(this).loginForm();

        usuarioWeb.setLogado(carregado);
        result.redirectTo(ProdutoController.class).lista();
    }

    public void logout(){
        usuarioWeb.logout();
        result.redirectTo(this).loginForm();
    }

    public void novo(){
    }
}
